namespace CSharpPro._1016;

public class User
{
   private Dictionary<string, string> userCredentials = new Dictionary<string, string>();

    // 作业7：用户登录与注册
    public void TestPrint7()
    {
        while (true)
        {
            Console.WriteLine("主菜单：1. 登录  2. 注册  3. 退出");
            if (int.TryParse(Console.ReadLine(), out int choice))
            {
                switch (choice)
                {
                    case 1:
                        // 登录功能
                        Console.WriteLine("请输入用户名：");
                        string username = Console.ReadLine();

                        if (string.IsNullOrWhiteSpace(username))
                        {
                            Console.WriteLine("用户名不可为空。");
                            break;
                        }

                        Console.WriteLine("请输入密码：");
                        string password = Console.ReadLine();

                        if (string.IsNullOrWhiteSpace(password))
                        {
                            Console.WriteLine("密码不可为空。");
                            break;
                        }

                        if (userCredentials.TryGetValue(username, out string storedPassword) && storedPassword == password)
                        {
                            Console.WriteLine("登录成功！进入系统首页（模拟）。");
                        }
                        else
                        {
                            Console.WriteLine("用户名不存在或密码错误。");
                        }
                        break;
                        
                    case 2:
                        // 注册功能
                        Console.WriteLine("请输入用户名（3 - 15个字符，只能包含字母、数字、下划线）：");
                        string newUser = Console.ReadLine();

                        if (string.IsNullOrWhiteSpace(newUser))
                        {
                            Console.WriteLine("用户名不可为空。");
                            break;
                        }

                        if (newUser.Length < 3 || newUser.Length > 15)
                        {
                            Console.WriteLine("用户名长度必须为3 - 15个字符。");
                            break;
                        }

                        bool isValidUser = true;
                        foreach (char c in newUser)
                        {
                            if (!char.IsLetterOrDigit(c) && c != '_')
                            {
                                isValidUser = false;
                                break;
                            }
                        }
                        
                        if (!isValidUser)
                        {
                            Console.WriteLine("用户名只能包含字母、数字、下划线。");
                            break;
                        }

                        if (userCredentials.ContainsKey(newUser))
                        {
                            Console.WriteLine("用户名已存在。");
                            break;
                        }

                        Console.WriteLine("请输入密码（6 - 20个字符，必须包含至少1个大写字母、1个小写字母和1个数字）：");
                        string newPwd = Console.ReadLine();

                        if (string.IsNullOrWhiteSpace(newPwd))
                        {
                            Console.WriteLine("密码不可为空。");
                            break;
                        }

                        if (newPwd.Length < 6 || newPwd.Length > 20)
                        {
                            Console.WriteLine("密码长度必须为6 - 20个字符。");
                            break;
                        }

                        bool hasUpper = false, hasLower = false, hasDigit = false;
                        foreach (char c in newPwd)
                        {
                            if (char.IsUpper(c)) hasUpper = true;
                            if (char.IsLower(c)) hasLower = true;
                            if (char.IsDigit(c)) hasDigit = true;
                        }

                        if (!hasUpper || !hasLower || !hasDigit)
                        {
                            Console.WriteLine("密码必须包含至少1个大写字母、1个小写字母和1个数字。");
                            break;
                        }

                        Console.WriteLine("请确认密码：");
                        string confirmPwd = Console.ReadLine();

                        if (string.IsNullOrWhiteSpace(confirmPwd))
                        {
                            Console.WriteLine("确认密码不可为空。");
                            break;
                        }

                        if (newPwd != confirmPwd)
                        {
                            Console.WriteLine("密码与确认密码不一致。");
                            break;
                        }

                        userCredentials.Add(newUser, newPwd);
                        Console.WriteLine("注册成功！");
                        break;
                        
                    case 3:
                        return;
                        
                    default:
                        Console.WriteLine("请输入有效数字。");
                        break;
                }
            }
            else
            {
                Console.WriteLine("请输入有效数字。");
            }
        }
    }
}